import { defineStore } from 'pinia';

/**
 * 页面数据传输存储
 * 用于在不同页面之间传递数据，支持持久化存储
 */
export default defineStore({
  id: 'pageData',
  
  state: () => ({
    // 通用数据存储对象
    commonData: {},
    
    // 各个模块数据存储
    qy: {}, // 企业端数据
    xf: {}, // 消防端数据
    other: {}, // 其他端数据
    
    // 临时数据存储（不会被持久化）
    tempData: {},
  }),
  
  actions: {
    /**
     * 设置通用数据
     * @param {String} key 数据键名
     * @param {Any} value 数据值
     */
    setCommonData(key, value) {
      console.log('设置通用数据:', key, value);
      this.commonData[key] = value;
    },
    
    /**
     * 获取通用数据
     * @param {String} key 数据键名
     * @param {Any} defaultValue 默认值（如果数据不存在）
     * @returns {Any} 存储的数据或默认值
     */
    getCommonData(key, defaultValue = null) {
      console.log('获取通用数据:', key);
      return this.commonData[key] !== undefined ? this.commonData[key] : defaultValue;
    },
    
    /**
     * 设置模块数据
     * @param {String} module 模块名称 (qy|xf|other)
     * @param {String} key 数据键名
     * @param {Any} value 数据值
     */
    setModuleData(module, key, value) {
      console.log('设置模块数据:', module, key, value);
      if (!this[module]) {
        console.error('模块不存在:', module);
        return;
      }
      this[module][key] = value;
    },
    
    /**
     * 获取模块数据
     * @param {String} module 模块名称 (qy|xf|other)
     * @param {String} key 数据键名
     * @param {Any} defaultValue 默认值（如果数据不存在）
     * @returns {Any} 存储的数据或默认值
     */
    getModuleData(module, key, defaultValue = null) {
      console.log('获取模块数据:', module, key);
      if (!this[module]) {
        console.error('模块不存在:', module);
        return defaultValue;
      }
      return this[module][key] !== undefined ? this[module][key] : defaultValue;
    },
    
    /**
     * 设置临时数据（不会被持久化）
     * @param {String} key 数据键名
     * @param {Any} value 数据值
     */
    setTempData(key, value) {
      console.log('设置临时数据:', key, value);
      this.tempData[key] = value;
    },
    
    /**
     * 获取临时数据
     * @param {String} key 数据键名
     * @param {Any} defaultValue 默认值（如果数据不存在）
     * @returns {Any} 存储的数据或默认值
     */
    getTempData(key, defaultValue = null) {
      console.log('获取临时数据:', key);
      return this.tempData[key] !== undefined ? this.tempData[key] : defaultValue;
    },
    
    /**
     * 清除指定数据
     * @param {String} type 数据类型 (common|qy|xf|other|temp)
     * @param {String} key 数据键名，如果不提供则清除该类型的所有数据
     */
    clearData(type, key) {
      console.log('清除数据:', type, key);
      if (key) {
        // 清除特定键的数据
        if (type === 'common' && this.commonData[key] !== undefined) {
          delete this.commonData[key];
        } else if (type === 'temp' && this.tempData[key] !== undefined) {
          delete this.tempData[key];
        } else if (this[type] && this[type][key] !== undefined) {
          delete this[type][key];
        }
      } else {
        // 清除该类型的所有数据
        if (type === 'common') {
          this.commonData = {};
        } else if (type === 'temp') {
          this.tempData = {};
        } else if (this[type]) {
          this[type] = {};
        }
      }
    },
    
    /**
     * 重置所有数据
     */
    resetAll() {
      console.log('重置所有数据');
      this.commonData = {};
      this.qy = {};
      this.xf = {};
      this.other = {};
      this.tempData = {};
    }
  },
  
  // 持久化存储配置
  persist: {
    enabled: true,
    detached: false,
    strategies: [
      {
        key: 'sheep-page-data',
        storage: {
          getItem: uni.getStorageSync,
          setItem: uni.setStorageSync,
        },
        paths: ['commonData', 'qy', 'xf', 'other'], // 只持久化这些字段，tempData不持久化
      },
    ],
  },
}); 